/**
  ******************************************************************************
  * @file    dev_key.h
  * @author  Yun
  * @version V1.0.0
  * @date    2025-02-12
  * @brief   按键设备驱动模块头文件
  * @license EULA (End User License Agreement)
  *          Copyright (c) 2025 星瑜科技自动化 Co., Ltd. All rights reserved.
  ******************************************************************************
  */

#ifndef FRAMEWORK_DEV_KEY_H
#define FRAMEWORK_DEV_KEY_H

#ifdef __cplusplus
extern "C" {
#endif

/*---------------------- Includes ----------------------*/
#include "dev_common_type.h"
#include "gpio_interface.h"

/*---------------------- 类型定义 ----------------------*/

/**
  * @brief  按键设备配置结构体
  */
typedef struct Dev_Button_Cfg {
    struct Dev_Button_Cfg* pstNext;            /*!< 链表下一个节点指针 */
    void* pHwCfg;                              /*!< 硬件配置指针 */
    Gpio_Interface_TypeDef* pstGpioInterface;  /*!< 设备操作接口 */
    uint8_t u8CurState:1;                        /*!< 当前物理状态 */
    uint8_t u8ActState:1;                        /*!< 有效触发状态 */
    uint8_t u8InitState:1;                       /*!< 初始状态 */
    uint8_t u8RunState:1;                            /*!< 运行状态 */
    uint8_t u8LockState:1;                          /*!< 锁定状态 */
} Dev_Button_Cfg_TypeDef;

/*---------------------- 全局变量声明 ----------------------*/
/*!< 按键设备链表头指针 */
extern Dev_Button_Cfg_TypeDef* stDevButtonCfgNodeHead;

/*---------------------- 设备操作API ----------------------*/
/**
  * @brief  注册按键设备
  * @param  pstDevButtonCfg: 按键配置结构体指针
  * @param  pHwCfg: 硬件配置指针
  * @param  pstDevIOInterface: 设备接口函数集
  * @retval DEV_Status_TypeDef 操作状态码
  * @note   将新设备插入设备链表头部，并执行硬件初始化
  */
uint8_t Dev_Button_Register(Dev_Button_Cfg_TypeDef* pstDevButtonCfg,
                            void* pHwCfg,
                            Gpio_Interface_TypeDef* pstGpioInterface);

/**
  * @brief  按键状态监视函数
  * @retval 无
  * @note   遍历所有注册的按键设备，检测状态变化并触发相应按键事件
  *         需周期性调用（建议5-10ms调用一次）
  */
void Dev_Button_Monitor(void* pArgs);

#ifdef __cplusplus
}
#endif

#endif /* FRAMEWORK_DEV_KEY_H */

/************************ (C) COPYRIGHT 星瑜科技自动化 *****END OF FILE****/
